<?php
 
class VKApi extends CApplicationComponent
{
	/**
	 * Path to VK.api entry point
	 * @var string
	 */
	public $apiUrl = 'http://api.vkontakte.ru/api.php';
	
	/**
	 * версия API, текущая версия равна 3.0.
	 * @var string
	 */
	public $apiVersion='3.0';
	
	/**
	 * идентификатор приложения, присваивается при создании.
	 * @var int
	 */
	public $apiId;
	public $secret;
		
	public function init()
    {
    	parent::init();
    }
 
    /**
     *
     * @param $method название метода API из общего списка функций.
     * @param $params
     * @param $format формат возвращаемых данных – XML или JSON. По умолчанию XML.
     */
    
    public function formatQuery($params, $format='JSON')
    {
    	$params = array_merge(array(
    			'format' => $format,
    			'api_id' => $this->apiId,
    			'v' => $this->apiVersion,
    	), $params);
    	
    	$params['sig'] = $this->getSignature($params, true);
    	
    	return $params;
    }
    
	public function run($method, $params = array(), $format='XML')
    {
    	$params = array_merge(array(
    			'method' => $method,
    			'format' => $format,
    			'api_id' => $this->apiId,
    			'v' => $this->apiVersion,
    	), $params);

    	$params['sig'] = $this->getSignature($params);

//    	echo Yii::app()->CURL->run($this->apiUrl, false, $params); die;
    	
    	$result = Yii::app()->CURL->run($this->apiUrl, false, $params);
    	
    	if (!empty($result) )
    	{
    		switch ($format)
    		{
    			case 'JSON':
    				$data = json_decode($result);
    				break;
    				
    			case 'XML':
    			default:
    				$data = new SimplexmlElement($result);
    				break;
    		}
    	}
    	
    	return !empty($data) ? $data : null;
	}
	
	protected function getSignature($params = array(), $vmode = false) 
	{
		$sig = '';
		ksort($params);
		foreach ($params as $key => $value)
			$sig .= $key . '=' . $value;
		$sig .= $this->secret;
		
		if ($vmode)
			$sig = Yii::app()->id . $sig;
		
		return md5($sig);
	}

}